package com.ssd.service;

import com.ssd.entity.Coupon;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ssd.entity.dto.request.CouponOperationPageQueryReqDTO;
import com.ssd.api.couponAndIntegral.dto.CouponUseBackReqDTO;
import com.ssd.api.couponAndIntegral.dto.CouponUseReqDTO;
import com.ssd.entity.dto.request.SeizeCouponReqDTO;
import com.ssd.api.couponAndIntegral.dto.AvailableCouponsResDTO;
import com.ssd.entity.dto.response.CouponInfoResDTO;
import com.ssd.api.couponAndIntegral.dto.CouponUseResDTO;
import com.ssd.viewmodel.Pager;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 我的优惠券表 服务类
 * </p>
 *
 * @author author
 * @since 2024-11-21
 */
public interface ICouponService extends IService<Coupon> {

    /**
     * 根据活动id查询下面的优惠券列表
     * @param couponOperationPageQueryReqDTO 查询参数
     * @return
     */
    Pager<CouponInfoResDTO> queryForPage(CouponOperationPageQueryReqDTO couponOperationPageQueryReqDTO);

    /**
     * 我的优惠券列表分页
     * @param lastId 最后一条数据的id
     * @param status 状态
     * @return
     */
    List<CouponInfoResDTO> queryMyCouponForPage(Long lastId, Integer status);

    /**
     * 根据金额计算用户可用优惠券列表
     * @param totalAmount 金额
     * @return
     */
    List<AvailableCouponsResDTO> getAvailable(BigDecimal totalAmount);

    /**
     * 使用优惠券并返回优惠金额
     * @param couponUseReqDTO 使用优惠券参数
     * @return
     */
    CouponUseResDTO use(CouponUseReqDTO couponUseReqDTO);

    /**
     * 优惠券回退
     * @param couponUseBackReqDTO 回退参数
     */
    void useBack(CouponUseBackReqDTO couponUseBackReqDTO);

    /**
     * 处理过期优惠券
     */
    void processExpireCoupon();

    /**
     * 用户抢券接口
     * @param seizeCouponReqDTO 抢券参数
     */
    void seizeCoupon(SeizeCouponReqDTO seizeCouponReqDTO);
}
